package com.example.chamberlainserver.mapper;

import com.example.chamberlainserver.Entry.MaterialBorrowRecord;
import com.example.chamberlainserver.Vo.Request.Material.MaterialBorrowQuery;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 物资外借记录Mapper接口
 */
@Mapper
public interface MaterialBorrowRecordMapper {
    
    /**
     * 添加物资外借记录
     * @param record 物资外借记录
     * @return 影响行数
     */
    int insertBorrowRecord(MaterialBorrowRecord record);
    
    /**
     * 更新物资外借记录
     * @param record 物资外借记录
     * @return 影响行数
     */
    int updateBorrowRecord(MaterialBorrowRecord record);
    
    /**
     * 删除物资外借记录
     * @param id 记录ID
     * @return 影响行数
     */
    int deleteBorrowRecord(Long id);
    
    /**
     * 根据ID查询物资外借记录
     * @param id 记录ID
     * @return 物资外借记录
     */
    MaterialBorrowRecord getBorrowRecordById(Long id);
    
    /**
     * 查询物资外借记录总数
     * @param query 查询条件
     * @return 总记录数
     */
    long countBorrowRecords(@Param("query") MaterialBorrowQuery query);
    
    /**
     * 分页查询物资外借记录
     * @param query 查询条件
     * @param offset 偏移量
     * @param limit 限制数
     * @return 物资外借记录列表
     */
    List<MaterialBorrowRecord> pageBorrowRecords(
        @Param("query") MaterialBorrowQuery query,
        @Param("offset") int offset,
        @Param("limit") int limit
    );
    
    /**
     * 根据物资ID查询未归还的借用记录数量
     * @param materialId 物资ID
     * @return 未归还的借用记录数量
     */
    int countUnreturnedByMaterialId(Long materialId);
}